#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int qpow(int a,int b){
    int r=1;
    while(b){
        if(b&1)r=1ll*r*a%mod;
        a=1ll*a*a%mod;
        b>>=1;
    }
    return r;
}
const int N=10000001;
int n,m,k;
int d[N];
bool f[N],g[N];
struct node{
    int u,v;
}b[3*N];
bool cmp(node i,node j){
    return 1ll*i.u*j.v<1ll*j.u*i.v;
}
int solve(int t){
    int l=0,r=t;
    while(l<r){
        int mid=l+r+1>>1;
        int v=b[mid].v;
        int x=b[mid].u;
        int p=2*x;
        bool flag=1;
        for(int i=1;i<=k;i++){
            p=max(2*x-p,0);
            if(g[d[i]])p+=x;
            if(p>v){
                flag=0;
                break;
            }
            p=v-p;
        }
        if(flag)l=mid;
        else r=mid-1;
    }
    return l;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    freopen("guess.in","r",stdin);
    freopen("guess.out","w",stdout);
    int t;
    cin>>t;
    while(t--){
        int a,A,B,C;
        cin>>n>>a>>A>>B>>C>>m;
        for(int i=1;i<=n;i++){
            a=(1ll*a*a%m*A+1ll*a*B+C)%m+1;
            if(f[a])g[a]=1;
            else f[a]=1;
        }
        k=0;
        for(int i=1;i<=m;i++)
            if(f[i])d[++k]=i;
        int t=2*k;
        for(int i=0;i<=t;i++)
            b[i].u=i+k,b[i].v=3*k;
        int p=b[solve(t)].u;
        b[0].u=0,b[0].v=1;
        t=0;
        for(int i=1;i<=3*k;i++){
            int j=(1ll*p*i-1)/(3*k)+1;
            if(3ll*k*j<1ll*(p+1)*i){
                t++;
                b[t].u=j,b[t].v=i;
            }
        }
        sort(b+1,b+t+1,cmp);
        p=solve(t);
        int ans=1ll*b[p].u*qpow(b[p].v,mod-2)%mod;
        cout<<fixed<<setprecision(5)<<1.0*b[p].u/b[p].v<<' '<<ans<<'\n';
        for(int i=1;i<=m;i++)f[i]=g[i]=0;
    }
    return 0;
}
